import requests  # 导入requests库，用于发送HTTP请求
import json  # 导入json库，用于处理JSON数据


def get_boss_headers():
    return {
        "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36',
        "Referer": "https://www.zhipin.com/",
        "Content-Type": "application/json",
        "Cookie":'你复制的Cookie'
    }
def save_to_json(data, filename='news.json'):
    """
    将数据保存为JSON文件。
    参数:
        data (dict or list): 要保存的数据
        filename (str): 保存的文件名，默认为'news.json'
    """
    try:
        with open(filename, 'w', encoding='utf-8') as f:
            # 使用json.dump将数据写入文件，ensure_ascii=False确保中文字符正常显示，indent=4使JSON格式化更美观
            json.dump(data, f, ensure_ascii=False, indent=4)
        print(f"数据已成功保存到 {filename}")
    except IOError as e:
        # 捕获文件操作中的IO错误并打印错误信息
        print(f"保存文件失败: {e}")

def search_position(keyword):
    """
    根据关键词搜索职位
    参数:
        keyword (str): 搜索的关键词，如职位
    """
    # boss搜索职位的API URL
    url = 'https://www.zhipin.com/wapi/zpgeek/search/joblist.json'
    # 请求参数，包括搜索关键词
    params = {
        "query": keyword,
    }
    # 发送GET请求，附带请求头和参数
    resp = requests.get(url, headers=get_boss_headers(), params=params)
    # 检查响应状态码是否为200（表示请求成功）
    if resp.status_code == 200:
        try:
            # 解析响应的JSON数据
            data = resp.json()
            jobs = data.get('zpData', {}).get('jobList', [])
            print(jobs)
            return jobs
        except json.JSONDecodeError:
            # 如果JSON解析失败，打印错误信息并返回None
            print("响应数据不是有效的JSON格式")
            return None
    else:
        # 如果请求不成功，打印状态码和错误信息
        print(f"请求失败，状态码: {resp.status_code}")
        return None
if __name__ == "__main__":
    """
    主程序入口，执行搜索职位并保存结果到JSON文件的操作。
    """
    data = search_position('python工程师')
    # 检查data是否为None，避免在保存时出现AttributeError
    if data is not None:
        # 调用save_to_json函数，将搜索结果保存到'职位.json'文件中
        save_to_json(data,'职位.json')
    else:
        print("未获取到有效的搜索数据，无法保存。")